home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_VON.ZIP / Virtual On.txt < prev    next >
Text File  |  1998-12-20  |  12KB  |  256 lines

  1.  
  2. Free Information Xchange '98 presents:
  3.  
  4. Cyber Troopers: Virtual On - CD crack by Static Vengeance
  5.  
  6. Requirements:
  7. hex editor and full install
  8.  
  9.     Sega Entertainment has released another fighter game.  This time you take control of huge
  10. battle droids in a one on one fight for control over the moon.  I'm still looking for the accel-
  11. erated PowerVR version that works with the US release of this game.  Anyways the game still runs
  12. pretty fast and has some decent effects.  However there is the CD check bug that needs to be FiX'ed.
  13. So I got W32Dasm up and running and disassembled v_on.exe and set out to remove the CD check.
  14.     I started out by going up to the menu bar and selecting "Refs" and then "String data references"
  15. from the drop down menu.  One the string data refs box showed up I grabbed the slider bar and scrolled
  16. down looking for interesting things like "Insert.. ", "Please insert..", or references to the CD volume
  17. or even "%C:\" which is commonly used in CD checks.  Well I found all three types of references in
  18. Virtual On.  From there I doubled clicked on them and followed the code to see what was going on.
  19. Here is the code along with a brief description of what the code is doing:
  20.  
  21. * Referenced by a CALL at Address:
  22. |:005C5CF5                                       <-- Where the call was made from.
  23. |
  24. :005C82BA 55                      push ebp
  25. :005C82BB 8BEC                    mov ebp, esp
  26. :005C82BD 83EC04                  sub esp, 00000004
  27. :005C82C0 53                      push ebx
  28. :005C82C1 56                      push esi
  29. :005C82C2 57                      push edi
  30.  
  31. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  32. |:005C830D(U)
  33. |
  34. :005C82C3 E826FFFFFF              call 005C81EE                        <-- Check for the CD
  35. :005C82C8 A3605FAE01              mov dword ptr [01AE5F60], eax
  36. :005C82CD 833D605FAE01FF          cmp dword ptr [01AE5F60], FFFFFFFF   <-- Check for the result
  37. :005C82D4 0F840A000000            je 005C82E4                          <-- This jump asks for the CD
  38. :005C82DA B801000000              mov eax, 00000001                    <-- Setup for passed CD check
  39. :005C82DF E92E000000              jmp 005C8312                         <-- Jump to the end of this routine
  40.  
  41. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  42. |:005C82D4(C)
  43. |
  44. :005C82E4 6A35                    push 00000035
  45.  
  46. * Possible StringData Ref from Data Obj ->"Virtual ON for PC"
  47.                                   |
  48. :005C82E6 A148F56B00              mov eax, dword ptr [006BF548]
  49. :005C82EB 50                      push eax
  50.  
  51. * Possible StringData Ref from Data Obj ->"Please insert VIRTUAL ON CD."  <-- Ask for the CD
  52.                                   |
  53. :005C82EC 6890876C00              push 006C8790
  54. :005C82F1 6A00                    push 00000000
  55.  
  56. * Reference To: USER32.MessageBoxA, Ord:0197h
  57.                                   |
  58. :005C82F3 FF15E8D56503            Call dword ptr [0365D5E8]
  59. :005C82F9 8945FC                  mov dword ptr [ebp-04], eax
  60. :005C82FC 837DFC02                cmp dword ptr [ebp-04], 00000002    <-- 02 means you hit cancel
  61. :005C8300 0F8507000000            jne 005C830D
  62. :005C8306 33C0                    xor eax, eax                        <-- Setup for a failed CD check
  63. :005C8308 E905000000              jmp 005C8312                        <-- Go to the return section
  64.  
  65. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  66. |:005C8300(C)
  67. |
  68. :005C830D E9B1FFFFFF              jmp 005C82C3                        <-- Go back up and retry
  69.  
  70. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  71. |:005C82DF(U), :005C8308(U)
  72. |
  73. :005C8312 5F                      pop edi        <-- This is the section that returns to the caller
  74. :005C8313 5E                      pop esi        <-- eax will already have the result in it when you
  75. :005C8314 5B                      pop ebx        <-- get here.  eax=00 for a failed CD check
  76. :005C8315 C9                      leave          <-- while eax=01 for a passed CD check
  77. :005C8316 C3                      ret
  78.  
  79.     That's the section that asks for the CD when not found.  So lets check the call to 5C82C3
  80. which is the routine that actually checks for the CD in your CD-ROM drive:
  81.  
  82. * Referenced by a CALL at Address:
  83. |:005C82C3   
  84. |
  85. :005C81EE 55                      push ebp
  86. :005C81EF 8BEC                    mov ebp, esp
  87. :005C81F1 83EC5C                  sub esp, 0000005C
  88. :005C81F4 53                      push ebx
  89. :005C81F5 56                      push esi
  90. :005C81F6 57                      push edi
  91.  
  92. * Reference To: KERNEL32.GetLogicalDrives, Ord:00E7h          <-- Common text string in CD checks
  93.                                   |
  94. :005C81F7 FF1518D46503            Call dword ptr [0365D418]
  95. :005C81FD 8945F4                  mov dword ptr [ebp-0C], eax
  96. :005C8200 C745F800000000          mov [ebp-08], 00000000
  97. :005C8207 E903000000              jmp 005C820F
  98.  
  99. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  100. |:005C822C(U), :005C8294(U)
  101. |
  102. :005C820C FF45F8                  inc [ebp-08]
  103.  
  104. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  105. |:005C8207(U)
  106. |
  107. :005C820F 837DF820                cmp dword ptr [ebp-08], 00000020
  108. :005C8213 0F8D80000000            jnl 005C8299
  109. :005C8219 B801000000              mov eax, 00000001
  110. :005C821E 8A4DF8                  mov cl, byte ptr [ebp-08]
  111. :005C8221 D3E0                    shl eax, cl
  112. :005C8223 8545F4                  test dword ptr [ebp-0C], eax
  113. :005C8226 0F8505000000            jne 005C8231
  114. :005C822C E9DBFFFFFF              jmp 005C820C
  115.  
  116. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  117. |:005C8226(C)
  118. |
  119. :005C8231 8B45F8                  mov eax, dword ptr [ebp-08]
  120. :005C8234 83C041                  add eax, 00000041
  121. :005C8237 50                      push eax
  122.  
  123. * Possible StringData Ref from Data Obj ->"%c:\"                <-- Common refs string to check out
  124.                                   |
  125. :005C8238 6888876C00              push 006C8788
  126. :005C823D 8D45A4                  lea eax, dword ptr [ebp-5C]
  127. :005C8240 50                      push eax
  128.  
  129. * Reference To: USER32.wsprintfA, Ord:026Ch
  130.                                   |
  131. :005C8241 FF1540D56503            Call dword ptr [0365D540]
  132. :005C8247 83C40C                  add esp, 0000000C
  133. :005C824A 8D45A4                  lea eax, dword ptr [ebp-5C]
  134. :005C824D 50                      push eax
  135.  
  136. * Reference To: KERNEL32.GetDriveTypeA, Ord:00CEh              <-- Commonly used call in CD check routines
  137.                                   |
  138. :005C824E FF151CD46503            Call dword ptr [0365D41C]
  139. :005C8254 83F805                  cmp eax, 00000005            <-- 05 is the CD-ROM drive value
  140. :005C8257 0F8537000000            jne 005C8294
  141.  
  142. * Possible StringData Ref from Data Obj ->"V_ON\V_ON.EXE"      <-- Checkin for the EXE with full path of CD
  143.                                   |
  144. :005C825D 6878876C00              push 006C8778
  145. :005C8262 8D45A4                  lea eax, dword ptr [ebp-5C]
  146. :005C8265 50                      push eax
  147.  
  148. * Reference To: KERNEL32.lstrcatA, Ord:0266h
  149.                                   |
  150. :005C8266 FF15D4D46503            Call dword ptr [0365D4D4]
  151. :005C826C 6A00                    push 00000000
  152. :005C826E 8D45A4                  lea eax, dword ptr [ebp-5C]
  153. :005C8271 50                      push eax
  154.  
  155. * Reference To: KERNEL32._lopen, Ord:0262h
  156.                                   |
  157. :005C8272 FF1520D46503            Call dword ptr [0365D420]
  158. :005C8278 8945FC                  mov dword ptr [ebp-04], eax
  159. :005C827B 837DFCFF                cmp dword ptr [ebp-04], FFFFFFFF
  160. :005C827F 0F840F000000            je 005C8294
  161. :005C8285 8B45FC                  mov eax, dword ptr [ebp-04]
  162. :005C8288 50                      push eax
  163.  
  164. * Reference To: KERNEL32._lclose, Ord:025Fh
  165.                                   |
  166. :005C8289 FF1524D46503            Call dword ptr [0365D424]
  167. :005C828F E905000000              jmp 005C8299
  168.  
  169. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  170. |:005C8257(C), :005C827F(C)
  171. |
  172. :005C8294 E973FFFFFF              jmp 005C820C
  173.  
  174. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  175. |:005C8213(C), :005C828F(U)
  176. |
  177. :005C8299 837DF820                cmp dword ptr [ebp-08], 00000020
  178. :005C829D 0F850A000000            jne 005C82AD
  179. :005C82A3 B8FFFFFFFF              mov eax, FFFFFFFF                <-- Need to return with FFFFFFFF
  180. :005C82A8 E908000000              jmp 005C82B5                     <-- for a passed CD check
  181.  
  182. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  183. |:005C829D(C)
  184. |
  185. :005C82AD 8B45F8                  mov eax, dword ptr [ebp-08]      <-- Any other value is a failed check
  186. :005C82B0 E900000000              jmp 005C82B5
  187.  
  188. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  189. |:005C82A8(U), :005C82B0(U)
  190. |
  191. :005C82B5 5F                      pop edi
  192. :005C82B6 5E                      pop esi
  193. :005C82B7 5B                      pop ebx
  194. :005C82B8 C9                      leave
  195. :005C82B9 C3                      ret
  196.  
  197.     Yet another example of what a CD check might look like.  So we know call to the CD check was
  198. made from 5C82C3 which is part of the "insert CD" routine.  The insert Cd routine runs from 5C82BA to
  199. 5C8316 and is called from 5C5CF5.  So now we need to check out the surounding code in that area:
  200.  
  201. :005C5CE1 837DD43D                cmp dword ptr [ebp-2C], 0000003D
  202. :005C5CE5 0F850A000000            jne 005C5CF5
  203. :005C5CEB C705E0846C0001000000    mov dword ptr [006C84E0], 00000001
  204.  
  205. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  206. |:005C5CE5(C)
  207. |
  208. :005C5CF5 E8C0250000              call 005C82BA          <-- Do the CD check
  209. :005C5CFA 85C0                    test eax, eax          <-- Test the result
  210. :005C5CFC 0F8507000000            jne 005C5D09           <-- Take this jump to continue with the game
  211. :005C5D02 33C0                    xor eax, eax           <-- Set up for a quit to Win95
  212. :005C5D04 E901060000              jmp 005C630A           <-- then go do it
  213.  
  214. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  215. |:005C5CFC(C)
  216. |
  217. :005C5D09 E85FA8F7FF              call 0054056D                     <-- Continue with the game
  218. :005C5D0E 837D0C00                cmp dword ptr [ebp+0C], 00000000
  219. :005C5D12 0F851B000000            jne 005C5D33
  220. :005C5D18 8B4508                  mov eax, dword ptr [ebp+08]
  221. :005C5D1B 50                      push eax
  222. :005C5D1C E8E8FBFFFF              call 005C5909
  223.  
  224.     There, we now have all the information we require to crack this game.  Just overwrite the call to
  225. the CD check with mov eax, 00000001 and this will force the jne 005C5D09 at 5C5CFC to always be taken.
  226. This in turns forces the game to always run if the CD is present or not.
  227.     There is PowerVR version from NEC Japan for Virtual On, however it doesn't work with the US release
  228. of this game due to the added files required for the PowerVR version.  In fact the CD check fails even with
  229. an original Virtual On CD online!  The PowerVR version's exe file is vonpvr.exe and it's the file that needs
  230. to be editted.  If you happen to own a PowerVR card and the special PowerVR version of Virtual On I have
  231. added the required edits for it also.  The edit you need to make is:
  232.  
  233. For the DirectX CD version edit v_on.exe
  234. ===============================================
  235. Search for: E8 C0 25 00 00  at offset 1,855,733
  236. Change to : B8 01 00 00 00
  237.  
  238. For the PowerVR CD version edit vonpvr.exe
  239. =============================================
  240. Search for: E8 6F 26 00 00  at offset 964,135
  241. Change to : B8 01 00 00 00
  242.  
  243. For the PowerVR net update edit vonpvr.exe
  244. =============================================
  245. Search for: E8 6F 26 00 00  at offset 964,359
  246. Change to : B8 01 00 00 00
  247.  
  248.     Once again with a simple edit another Sega game, Virtual On, has been FiX'ed
  249.  
  250. Static Vengeance
  251.  
  252.  
  253.  
  254. NOTE:  A simple search string to find the CD check would be: "E8 xx xx 00 00 0F 85 07 00 00 00 33 C0 E9"
  255.        Once found, change the E8 xx xx 00 00 to B8 01 00 00 00 and you have cracked Virtual On.
  256.